Ker smo v prejšnji datoteki preizkusili modele le na urnih podatkih, se bomo zdaj osredotočili na 15 minutne frekvence. Vprašanje, ki se mi postavlja je, ali je bolje vzeti samo podatke, ki so na voljo pri iskani frekvenci, ali je morda bolje model “učiti” na večjih podatkih in prirediti rezultate na višje frekvence npr. tako, da enakomerno razdelimo odjem na manjših intervalih.
Tukaj preizkušam, kako se modeli obnesejo kadar jih nauičimo na 15minutnih in interpoliranih podatkih.
Zdaj naredimo sezonsko dekompozicijo časovne vrste.
data_all_15_combined$ELCE %>% msts( seasonal.periods = c(4*24, 4*24*7, 4*24*365)) %>% mstl() %>% autoplot()
Prva modela, ki ju bomo prezkusili za napovedovanje odjema sta modela sezonske dekompozicije, kjer bomo vsako od zgornjih sezonskih komponent modelirali z dvema metodama - eksponentnim glajenjem in arima modelom.
splits <- initial_time_split(data_all_15_combined, prop = 0.85)
decomp_model_ets <- seasonal_reg(
mode = "regression",
seasonal_period_1 = 4*24,
seasonal_period_2 = 4*7*24,
seasonal_period_3 = 4*365*24
) %>% set_engine("stlm_ets") %>% fit(formula = ELCE ~ DateTime, data=training(splits))
decomp_model_arima <- seasonal_reg(
mode = "regression",
seasonal_period_1 = 4*24,
seasonal_period_2 = 4*7*24,
seasonal_period_3 = 4*365*24
) %>% set_engine("stlm_arima") %>% fit(formula = ELCE ~ DateTime, data=training(splits))
models_tbl <- modeltime_table(
decomp_model_ets,
decomp_model_arima
)
forecast_tbl <- models_tbl %>%
modeltime_forecast(new_data = testing(splits),
quiet = FALSE)
actual_tbl <- data_all_15_combined %>% tail(4*1000*24) %>%
mutate(.model_id = 0, .model_desc = "Actual", .key = "Actual") %>%
rename(.index = DateTime, .value = ELCE)
forecast_tbl_all <- rbind(forecast_tbl, actual_tbl)
forecast_tbl_all %>%
plot_modeltime_forecast(.conf_interval_show = FALSE ,.interactive = TRUE)